package com.jbp.service;

import com.cloopen.rest.sdk.utils.DateUtil;
import com.jbp.redis.RedisConfigService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.stereotype.Service;

import java.io.Serializable;
import java.time.Duration;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

@Service
public class ChangeLuckService {
/*
    玩法一：变身蛋（在小蛋中）
    概念：两个奖池在到达条件时候，来回切换
    具体：两元蛋投入积累到15万的时候，切换为另外一个2.5元蛋的奖池，两个奖池独立不干涉，礼物不同，意思为，两个奖池来回切换，
    两元蛋以投入量累计到达15万为标准切换（需要有进度条），2.5元蛋以三分钟倒计时切换为标准，三分钟结束后，再切换为两元蛋，进度条归零。
    切换时候可有0.5秒变身的空隙。

    1. 2元蛋对应的是15万的投入量的进度条，2.5元对应的是3分钟倒计时的进度条
    2. 2.5元蛋的页面是2元蛋页面的变身
    3. 两个公屏
    4. 2.5元蛋抽奖需要钥匙才可以抽，一把钥匙2.5元，
    5. 需要添加购买钥匙的页面
* */
    @Autowired
    private PropertyService propertyService;
    @Autowired
    private RedisConfigService redisConfigService;
    //当奖池为1时， 记录当前累积奖池
    public static final String key_curr_pool = "haoya:luck:change:currpool";
    //当奖池为2时， 记录计时开始时间
    public static final String key_start_time = "haoya:luck:change:starttime";
    //累积奖池总额
//    public static final int key_full_pool = 1500000;
    public static final int key_pool_type = 25;

    /**
     * 获取当前配置
     * */
    public Map getConfig(){
        String changeLuckFullPool = propertyService.getV("changeLuckFullPool");
        Integer key_full_pool = Integer.parseInt(changeLuckFullPool);
        if (key_full_pool==null) {
            key_full_pool=0;
        }

        Map<String, Object> map = new HashMap<>();
//        map.put("isChangedLuck",redisConfigService.exists(key_start_time));
        map.put("isChangedLuck", false);
        map.put("toolPool", key_full_pool);
        map.put("currPool", redisConfigService.get(key_curr_pool));
        map.put("startTime", redisConfigService.get(key_start_time));
        map.put("poolType", 25);
        return map;
    }

    /**当前是否变身，ture 是变身蛋*/
    public boolean isChangedLuck() {
        return redisConfigService.exists(key_start_time);
    }

    /**
     * 设置变身时间
     * */
    public void setChangedLuck(){
        String date = DateUtil.dateToStr(new Date(), 12);
        redisConfigService.set(key_start_time, date, 3L*60);
    }

    /**
     * 累积奖池
     * */
    public void addPool(int coin) {
        String changeLuckFullPool = propertyService.getV("changeLuckFullPool");
        Integer key_full_pool = Integer.parseInt(changeLuckFullPool);
        if (key_full_pool==null) {
            key_full_pool=0;
        }

        //不是变身蛋
        if (!isChangedLuck()) {
            Integer currCoin = (Integer) redisConfigService.get(key_curr_pool);
            if (currCoin==null) {
                currCoin=0;
            }
            currCoin += coin;
            if (currCoin>=key_full_pool) {
                currCoin=0;
                setChangedLuck();
            }
            redisConfigService.set(key_curr_pool, currCoin);
        }
    }
}
